function [true_neighbor,barrier]=goaheade(nowlocation,barrier,end_x,end_y)
    %此函数主要实现了对周围的探索和路径综合值计算
    sport = [0,1;0,-1;-1,0;1,0;
             1,1;1,-1;-1,-1;-1,1];                           %八种运动方式：九宫格的周围八个
    
    neighbor = zeros(8,2);                                         %设立一个邻居集合，每走一步将其重置一次
    where = [];                                            %设置一个flag，相当于对障碍物标记
    true_neighbor = zeros(8,4);                            %真实邻居矩阵，即在上一步骤中找到的邻居排除了障碍物
    

    %探索路径，排除障碍物
    for i=1:8                                              %从当前位置出发上下左右四个格子进行搜索，将四个位置坐标存入neighbor集合中%遍历四个邻居有没有在障碍物上的
        neighbor(i,1) = nowlocation(1,1) + sport(i,1);
        neighbor(i,2) = nowlocation(1,2) + sport(i,2);
        

        if barrier(neighbor(i,1),neighbor(i,2))==0.5          %走过的路标记为障碍物
            where = [where;i];
            continue
        end
        
        if barrier(neighbor(i,1),neighbor(i,2))~=0             %如果不在障碍物上，则转移到真实邻居集合中，同时计算g和h
            true_neighbor(i,1) = neighbor(i,1);            %真实邻居的X坐标
            true_neighbor(i,2) = neighbor(i,2);            %真实邻居的Y坐标
            if i<5
                true_neighbor(i,3) = 1;        %将g设置为行走一步的代价，不考虑全体
            else
                true_neighbor(i,3) = 1.4;
            end
            true_neighbor(i,4) = sqrt((abs(end_x - neighbor(i,1)))^2   +  (abs(end_y - neighbor(i,2)))^2);          %真实邻居的启发函数h，到目标点的预估值
        elseif barrier(neighbor(i,1),neighbor(i,2))==0         %如果在障碍物上
            where = [where;i];                             %标记障碍物在四个方向上的哪一个
        end
    end
    where(end:-1:1)=where;                                 %障碍物标记倒序，这样好删除
    for i=1:size(where)                                    %遍历障碍物个数
        true_neighbor(where(i),:)=[];                      %在真实邻居中删除障碍物
    end
end